package com.redepronik.negosysdis.invfac.controller;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.event.ActionEvent;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.invfac.entity.Bodega;
import com.redepronik.negosys.invfac.entity.Detalleingreso;
import com.redepronik.negosys.invfac.entity.Ingreso;
import com.redepronik.negosys.invfac.entity.Producto;
import com.redepronik.negosys.invfac.entity.Tipodocumento;
import com.redepronik.negosys.invfac.service.BodegaService;
import com.redepronik.negosys.invfac.service.IngresoService;
import com.redepronik.negosys.invfac.service.ProductoService;
import com.redepronik.negosys.rrhh.entity.Persona;
import com.redepronik.negosys.rrhh.service.EmpleadoService;
import com.redepronik.negosys.rrhh.service.ProveedorService;

@Controller
@Scope("session")
public class IngresoBean {

	@Autowired
	private IngresoService ingresoService;

	@Autowired
	private ProductoService productoService;

	@Autowired
	private ProveedorService proveedorService;

	@Autowired
	private BodegaService bodegaService;

	@Autowired
	EmpleadoService empleadoService;

	private Ingreso ingreso;
	private Bodega bodega;
	private Persona proveedor;

	private Detalleingreso detalleIngreso;
	private List<Bodega> listaBodegas;

	private Producto producto;
	private List<Producto> listaProductoBusqueda;
	private String criterioProductoBusqueda;

	private List<Persona> listaProveedorBusqueda;
	private String criterioProveedorBusqueda;

	public IngresoBean() {
	}

	public void cancelar() {
		producto = new Producto();
		bodega = new Bodega();
		detalleIngreso = new Detalleingreso();
	}

	public void cancelarTodo() {
		ingreso = new Ingreso();
		ingreso.setTotal(new BigDecimal("0.00"));
		proveedor = new Persona();
		ingreso.setTipodocumento(new Tipodocumento());
	}

	public void cargarProveedor() {
		proveedor = proveedorService.obtenerPorPersonaId(proveedor
				.getPersonaid());
		ingreso.setProveedor(proveedor.getProveedor());
	}

	public void eliminarDetalle(ActionEvent actionEvent) {
		ingresoService.eliminarDetalle(ingreso, detalleIngreso);
	}

	public Bodega getBodega() {
		return bodega;
	}

	public String getCriterioProductoBusqueda() {
		return criterioProductoBusqueda;
	}

	public String getCriterioProveedorBusqueda() {
		return criterioProveedorBusqueda;
	}

	public Detalleingreso getDetalleIngreso() {
		return detalleIngreso;
	}

	public Ingreso getIngreso() {
		return ingreso;
	}

	public List<Bodega> getListaBodegas() {
		return listaBodegas;
	}

	public List<Producto> getListaProductoBusqueda() {
		return listaProductoBusqueda;
	}

	public List<Persona> getListaProveedorBusqueda() {
		return listaProveedorBusqueda;
	}

	public Producto getProducto() {
		return producto;
	}

	public Persona getProveedor() {
		return proveedor;
	}

	@PostConstruct
	public void init() {
		ingreso = new Ingreso();
		ingreso.setTotal(new BigDecimal("0.00"));
		bodega = new Bodega();
		proveedor = new Persona();
		ingreso.setTipodocumento(new Tipodocumento());
		detalleIngreso = new Detalleingreso();
		producto = new Producto();
		setListaBodegas(bodegaService.obtenerPorBodeguero(SecurityContextHolder
				.getContext().getAuthentication().getName()));
	}

	public void insertar(ActionEvent actionEvent) {
		ingreso.setBodegueroid(empleadoService
				.obtenerEmpleadoCargoPorCedulaAndCargo(SecurityContextHolder
						.getContext().getAuthentication().getName(), 3));
		ingreso.setProveedor(proveedor.getProveedor());
		if (ingresoService.insertar(ingreso))
			cancelarTodo();
	}

	public void insertarDetalle(ActionEvent actionEvent) {
		ingresoService.insertarDetalle(ingreso, producto, bodega,
				detalleIngreso);
	}

	public void limpiarObjetosBusquedaProductos() {
		criterioProductoBusqueda = new String();
		listaProductoBusqueda = new ArrayList<Producto>();
		producto = new Producto();
		detalleIngreso = new Detalleingreso();
		if (listaBodegas.size() == 1)
			bodega.setBodegaid(listaBodegas.get(0).getBodegaid());
		else
			bodega = new Bodega();
	}

	public void limpiarObjetosBusquedaProveedor() {
		criterioProveedorBusqueda = new String();
		listaProveedorBusqueda = new ArrayList<Persona>();
	}

	public void obtenerProductosPorBusqueda() {
		listaProductoBusqueda = productoService
				.obtenerParaBusqueda(criterioProductoBusqueda.toUpperCase());
	}

	public void obtenerProveedoresPorBusqueda() {
		listaProveedorBusqueda = proveedorService
				.obtener(criterioProveedorBusqueda.toUpperCase());
	}

	public void setBodega(Bodega bodega) {
		this.bodega = bodega;
	}

	public void setCriterioProductoBusqueda(String criterioProductoBusqueda) {
		this.criterioProductoBusqueda = criterioProductoBusqueda;
	}

	public void setCriterioProveedorBusqueda(String criterioProveedorBusqueda) {
		this.criterioProveedorBusqueda = criterioProveedorBusqueda;
	}

	public void setDetalleIngreso(Detalleingreso detalleIngreso) {
		this.detalleIngreso = detalleIngreso;
	}

	public void setIngreso(Ingreso ingreso) {
		this.ingreso = ingreso;
	}

	public void setListaBodegas(List<Bodega> listaBodegas) {
		this.listaBodegas = listaBodegas;
	}

	public void setListaProductoBusqueda(List<Producto> listaProductoBusqueda) {
		this.listaProductoBusqueda = listaProductoBusqueda;
	}

	public void setListaProveedorBusqueda(List<Persona> listaProveedorBusqueda) {
		this.listaProveedorBusqueda = listaProveedorBusqueda;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	public void setProveedor(Persona proveedor) {
		this.proveedor = proveedor;
	}
}